home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-04
/
bipl.zip
/
PROCS.ZIP
/
WRAP.ICN
< prev
next >
Wrap
Text File
|
1992-12-30
|
3KB
|
102 lines
############################################################################
#
# File: wrap.icn
#
# Subject: Procedures to wrap output lines
#
# Author: Robert J. Alexander
#
# Date: December 5, 1989
#
###########################################################################
#
# wrap(s,i) -- Facilitates accumulation of small strings into longer
# output strings, outputting when the accumulated string would
# exceed a specified length (e.g. outputting items in multiple
# columns).
#
# s -- string to accumulate
# i -- width of desired output string
#
# Wrap fails if the string s did not necessitate output of the buffered
# output string; otherwise the output string is returned (which never
# includes s).
#
# s defaults to the empty string (""), causing nothing to be
# accumulated; i defaults to 0, forcing output of any buffered string.
# Note that calling wrap() with no arguments produces the buffer (if it
# is not empty) and clears it.
#
# Wrap does no output to files.
#
#
# Here's how wrap is normally used:
#
# wrap() # Initialize (not really necessary unless
# # a previous use might have left stuff in
# # the buffer).
#
# every i := 1 to 100 do # Loop to process strings to output --
# write(wrap(x[i],80)) # only writes when 80-char line filled.
#
# write(wrap()) # Output what's in buffer -- only outputs
# # if something to write.
#
#
# wraps(s,i) -- Facilitates managing output of numerous small strings
# so that they do not exceed a reasonable line length (e.g.
# outputting items in multiple columns).
#
# s -- string to accumulate
# i -- maximum width of desired output string
#
# If the string "s" did not necessitate a line-wrap, the string "s" is
# returned. If a line-wrap is needed, "s", preceded by a new-line
# character ("\n"), is returned.
#
# "s" defaults to the empty string (""), causing nothing to be
# accumulated; i defaults to 0, forcing a new line if anything had been
# output on the current line. Thus calling wraps() with no arguments
# reinitializes it.
#
# Wraps does no output to files.
#
#
# Here's how wraps is normally used:
#
# wraps() # Initialize (not really necessary unless
# # a previous use might have left it in an
# # unknown condition).
#
# every i := 1 to 100 do # Loop to process strings to output --
# writes(wraps(x[i],80))# only wraps when 80-char line filled.
#
# writes(wraps()) # Only outputs "\n" if something written
# # on last line.
#
############################################################################
procedure wrap(s,i)
local t
static line
initial line := ""
/s := "" ; /i := 0
if *(t := line || s) > i then
return "" ~== (s :=: line)
line := t
end
procedure wraps(s,i)
local t
static size
initial size := 0
/s := "" ; /i := 0
t := size + *s
if t > i & size > 0 then {
size := *s
return "\n" || s
}
size := t
return s
end